package com.thunisoft.design.singleton;

/**
 * 双重校验锁模式
 * 
 * @title LazyDoubleCheckSingleton.java
 * @package com.thunisoft.design.singleton
 * @projectName spring.boot
 * @author yzj
 * @date 2020年5月22日 下午1:37:16
 */
public class LazyDoubleCheckSingleton {

	private static volatile LazyDoubleCheckSingleton instance = null;

	/**
	 * 双重校验锁，是否安全？
	 * @return
	 */
	public static LazyDoubleCheckSingleton getInstance() {
		if (instance == null) {
			synchronized (LazyDoubleCheckSingleton.class) {
				if (instance == null) {
					// 这一句创建上，这一句实际上有两个操作
					// 1.开辟内存空间并赋值给instance 
					// 2.初始化LazyDoubleCheckSingleton实例
					instance = new LazyDoubleCheckSingleton();
				}
			}
		}
		return instance;
	}
}
